{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<img src=\"http://hilpisch.com/tpq_logo.png\" alt=\"The Python Quants\" width=\"35%\" align=\"right\" border=\"0\"><br>"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Python for Finance (2nd ed.)\n",
    "\n",
    "**Mastering Data-Driven Finance**\n",
    "\n",
    "&copy; Dr. Yves J. Hilpisch | The Python Quants GmbH\n",
    "\n",
    "<img src=\"http://hilpisch.com/images/py4fi_2nd_shadow.png\" width=\"300px\" align=\"left\">"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Model Calibration"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## The Data"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {
    "uuid": "f087ed8b-b432-48a9-a791-451ac477c046"
   },
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "import pandas as pd\n",
    "import datetime as dt"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "from pylab import mpl, plt\n",
    "plt.style.use('seaborn')\n",
    "mpl.rcParams['font.family'] = 'serif'\n",
    "%matplotlib inline"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {
    "uuid": "1d45b83a-110e-4c94-9404-859554d3f2d7"
   },
   "outputs": [],
   "source": [
    "import sys\n",
    "sys.path.append('../')\n",
    "sys.path.append('../dx')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [],
   "source": [
    "dax = pd.read_csv('../../source/tr_eikon_option_data.csv',\n",
    "                 index_col=0)  "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [],
   "source": [
    "for col in ['CF_DATE', 'EXPIR_DATE']:\n",
    "    dax[col] = dax[col].apply(lambda date: pd.Timestamp(date))  "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<class 'pandas.core.frame.DataFrame'>\n",
      "Int64Index: 115 entries, 0 to 114\n",
      "Data columns (total 7 columns):\n",
      "Instrument    115 non-null object\n",
      "CF_DATE       115 non-null datetime64[ns]\n",
      "EXPIR_DATE    114 non-null datetime64[ns]\n",
      "PUTCALLIND    114 non-null object\n",
      "STRIKE_PRC    114 non-null float64\n",
      "CF_CLOSE      115 non-null float64\n",
      "IMP_VOLT      114 non-null float64\n",
      "dtypes: datetime64[ns](2), float64(3), object(2)\n",
      "memory usage: 7.2+ KB\n"
     ]
    }
   ],
   "source": [
    "dax.info()  "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>CF_DATE</th>\n",
       "      <th>EXPIR_DATE</th>\n",
       "      <th>PUTCALLIND</th>\n",
       "      <th>STRIKE_PRC</th>\n",
       "      <th>CF_CLOSE</th>\n",
       "      <th>IMP_VOLT</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Instrument</th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>.GDAXI</th>\n",
       "      <td>2018-04-27</td>\n",
       "      <td>NaT</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>12500.47</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>GDAX105000G8.EX</th>\n",
       "      <td>2018-04-27</td>\n",
       "      <td>2018-07-20</td>\n",
       "      <td>CALL</td>\n",
       "      <td>10500.0</td>\n",
       "      <td>2040.80</td>\n",
       "      <td>23.59</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>GDAX105000S8.EX</th>\n",
       "      <td>2018-04-27</td>\n",
       "      <td>2018-07-20</td>\n",
       "      <td>PUT</td>\n",
       "      <td>10500.0</td>\n",
       "      <td>32.00</td>\n",
       "      <td>23.59</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>GDAX108000G8.EX</th>\n",
       "      <td>2018-04-27</td>\n",
       "      <td>2018-07-20</td>\n",
       "      <td>CALL</td>\n",
       "      <td>10800.0</td>\n",
       "      <td>1752.40</td>\n",
       "      <td>22.02</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>GDAX108000S8.EX</th>\n",
       "      <td>2018-04-26</td>\n",
       "      <td>2018-07-20</td>\n",
       "      <td>PUT</td>\n",
       "      <td>10800.0</td>\n",
       "      <td>43.80</td>\n",
       "      <td>22.02</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>GDAX110000G8.EX</th>\n",
       "      <td>2018-04-27</td>\n",
       "      <td>2018-07-20</td>\n",
       "      <td>CALL</td>\n",
       "      <td>11000.0</td>\n",
       "      <td>1562.80</td>\n",
       "      <td>21.00</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>GDAX110000S8.EX</th>\n",
       "      <td>2018-04-27</td>\n",
       "      <td>2018-07-20</td>\n",
       "      <td>PUT</td>\n",
       "      <td>11000.0</td>\n",
       "      <td>54.50</td>\n",
       "      <td>21.00</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                   CF_DATE EXPIR_DATE PUTCALLIND  STRIKE_PRC  CF_CLOSE  \\\n",
       "Instrument                                                               \n",
       ".GDAXI          2018-04-27        NaT        NaN         NaN  12500.47   \n",
       "GDAX105000G8.EX 2018-04-27 2018-07-20       CALL     10500.0   2040.80   \n",
       "GDAX105000S8.EX 2018-04-27 2018-07-20       PUT      10500.0     32.00   \n",
       "GDAX108000G8.EX 2018-04-27 2018-07-20       CALL     10800.0   1752.40   \n",
       "GDAX108000S8.EX 2018-04-26 2018-07-20       PUT      10800.0     43.80   \n",
       "GDAX110000G8.EX 2018-04-27 2018-07-20       CALL     11000.0   1562.80   \n",
       "GDAX110000S8.EX 2018-04-27 2018-07-20       PUT      11000.0     54.50   \n",
       "\n",
       "                 IMP_VOLT  \n",
       "Instrument                 \n",
       ".GDAXI                NaN  \n",
       "GDAX105000G8.EX     23.59  \n",
       "GDAX105000S8.EX     23.59  \n",
       "GDAX108000G8.EX     22.02  \n",
       "GDAX108000S8.EX     22.02  \n",
       "GDAX110000G8.EX     21.00  \n",
       "GDAX110000S8.EX     21.00  "
      ]
     },
     "execution_count": 7,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "dax.set_index('Instrument').head(7)  "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [],
   "source": [
    "initial_value = dax.iloc[0]['CF_CLOSE']  "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [],
   "source": [
    "calls = dax[dax['PUTCALLIND'] == 'CALL'].copy()  \n",
    "puts = dax[dax['PUTCALLIND'] == 'PUT '].copy()  "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAnEAAAFzCAYAAABRrV+uAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDMuMC4xLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvDW2N/gAAIABJREFUeJzs3Xt8VNW9//9XkkmUu4EEwVsRJEtTARVta7UGREUEPQasWPHCKdaIykm8IFLFIlVQK5poRXOq3/LrTestoohiW4z2tFAUVLyEhYoUFRECsUAuJpnk98fsCZPMNWQyl+T9fDx4kFl79p4944Af1lrvtVKam5sRERERkeSSGu8bEBEREZH2UxEnIiIikoRUxImIiIgkIRVxIiIiIklIRZyIiIhIElIRJyIiIpKEXPG+gXB27tyrNVBEREQkKWRn90mJ1WupJ05EREQkCSV8T5yIiIhIV2GMGQbcBawHjgB2WWsX+By/HSiy1maFu5aKOBEREZHY6Q88Za1dBmCM+cgY87K1dp0xZgyQGemFVMSJiIiIxIi19q02TalAtTHmUOAS4B7gykiulfBFXGZmT1yutHjfhoiIiEhUGWPygZXAJuA3wM1Av0jPT/girqqqJt63ICIiIhKR7Ow+ET3PGDMWGAsUAScBDUABnuHUHsaYW4HnrLUfB7tGSnNzYq/goSVGREREJFlEssSIMWYi8CNgLjAY+I61drVzbAjwdiTBBi0xIiIiIhIjxpjRwJ+BHwCvA8sA4xw7BrgeT0/c7caYXqGupZ44ERGRGCorc1FcnMGmTank5DRRVFRPfn5jvG9LoiSWi/0m/Jw4ERGRrqKszEVBQY+WxxUVac7j2g4XcpWVlTz55O/o06cvDQ0NfPbZZk46aTTp6Rk8+uhDnHXWuWRmelav+PDDD5g583qGDzcBr/Wvf63mX//6J3369GXfvr3s2LGDadOu4NBDB7FkyUOsXbuGWbNu4Kyzxrc6b+vWLTz//DP06dMXgH379nHllTM45JBDAHjhhWf55JOPyczsz7ZtX5KVlc3MmbNYu3YNS5Y8RFZWFscd910Atm37kry8MznjjDEd+ly6sm5bxPWbPImUmmrcQ4biHjoM99HO70OH0ZzZP963JyIiXVBxcUbA9pKSjA4VcfX19dx6640sXPgrBg48FIDdu3dx++1zWLLkcX7/+98yefJFDB16DAAbNrxLZuaAgNd65511LFv2PHfffR8pKZ5Opeeff4YNG97l4osvZcKESWze/KlfAVdZWcm8eXNZsuQ39OrVG4DNmz9l7twb+fWvf0NdXS2PP/4YL730F1JSUmhsbOTBB+8D4Hvf+wF/+curHHvscUyZMhWAL774nIaGhgP+TLqDblvE1Y+fQO95c0lfv65V+7fjzmbPk8/F6a5ERKQr27Qp8FT0YO2R+uc//86gQYNbCjiA/v0HcPfdv/J77ksvvcCxxx5HVlbgefNPPvkHLrxwSksBB3DBBfnU1dWFvIfly1/glFO+31LAAQwdOoy0NBcbNrzLd787gubmZp566o9MmDCJQw45hNmzfx7wWh988D5bt27hvPPOD/ma3V23DTY83+NS6klv1daAixfOuC9OdyQiIl1dTk5Tu9oj9cUXnzNggH/Pmnf4FOCPf/z/KClZzN/+9lrIa3355ef079/6Wi6Xi969ewc5w+Prr7czYIB/YThgwAC+/PJzMjIyePjh/+WTTyyXXXYRM2fOYM2af7Z6bnn5KkpKFvPMM38K+Vri0W174u554nD6ch4Xsqyl7VFmUvrnEZw5U2vTiYhI9BUV1beaE+dVWFjfoesOHHgoGzdWhHzOtGlXMnToMVRW7qRnz+Chx+zsgezevavd93DooYPYtavSr33Xrl1kZ3t6CIcOHca8eb/E7Xbzxhuvc/vtt/Dcc8vp188zZ27MmDOZMmUq1dX7qK0N3fMn3bgnbtOmVJYyveXxLvozn/kd7tIWEREJJj+/kdLSWnJz3bhczeTmuikt7Xio4YwzxvL551vZuXNHS9vWrVuYM+cGv+dmZWXTs2fPoNe65JLLWLHiRXxXr1i69HFeffXloOc8/fSfmDTpv3jrrX9RXb2vpX3z5k+pq6vj5JO/x1dfbWPRIs8+72lpaZxxxhjS0wPPEfQMyTazadPGoK8p3bgnLieniZcrJrKDbAayk/nMp4r+5Oa4431rIiLSheXnN0Z9SZGDDz6YxYsf4qmn/kivXr1oaGhg9+5d3HzzXJYvX8a+fft48cUyJk++mKOO+k7Ia/3gBz8E4Ne/fpBevXqzd+9eMjMzGT/+PKqqqli5cgW7dlWydOnjLed8+eUXXHzxpSxYsIj//d8l9O3r2Tmqrq6O++9/iLS0NHr16s2ePf/hoYcW06tXb776ahszZ86iX79DePvttXz66cf85z//Ye/evYAnKJGb+11yco6N6mfVlYRdJ84YMwy4C1gPHAHsstYuMMb0x7NJ62ZgOPBza+3Xzjmzgb54to54zVr7otN+AnAd8BkwELjZWhvym9xZ68R5Y94PUsQ5vMZINuDGFZV/EYmIiEj3lGjrxPUHnrLWLgMwxnxkjHkZ+BnwV2vt08aY84H7gcuNMd8HxlprzzPGpAMfGWPeBP4D/AE4y1q73RizGLgSeKIT3ldYnkKtlpX3Xs5ft5yDOTaFwkIVcCIiIpIcwhZx1tq32jSlAtXAROBup+0fwP/n/DwJWO2c22CMqQDOAD4Eelhrt/uccxlxKuLA26WdA+QACjOIiEj38cUXn7Nhw7ut2g4//EhGjTohTnck7dWuOXHGmHxgpbV2ozFmILDXObQHyDTGuPAMk/pGZPY4bTt9nu/bLiIiIjF2xBFHcsQRR8b7NqQDIo5iGmPGAmMBb9RlB9DH+bkvUOXMb/Nt9x7bEaJdRERERNopoiLOGDMRGA8UAoOMMacCLwOnOk85zXkMsNzb7vTM5QJv4glA1BpjBgU4R0RERETaIZJ06mjgDeBtp6kX8AjwInAv8G9gGHBrm3RqpvPrlTbp1FnOOf2JYzpVREQk1rRvd9cXy3Rq2CIu3lTEiYhIV9Gj9BF6z5vr1659uyPnrVt893btLG63m7S0tHadoyLOh4o4ERHpKlIqKxkwypDS0NDS1uxyUfXGGtzDcw7omh999AFLljxEY2Mj11xzPQCPP/4YX321jaeeKiM9ff8+4UuWPMTKlSu46qprOP30M1iy5CHWrl3DBRfkU19fzxdfbOXmm+eS2aZXsKamhsWLF7FmzT+ZN++XLQsCl5U9y8qVK7jppjkcddQQ/vSn39HY2EhqairffPMNZ555FieeOJqGhgaWLHmIF198nlmzbuDCCy9qufa1115Fbu7x7NnzH954YxXnn58PwH/+8w233Ta/1X3s3r2L3/3ut1x3XWGr9+X19ttrWbPmn1x/fVHQz2vz5k8oLr6fc8+dyHnnnd/q2N69e/n738tb2t9+ey1bt/6byZN/HO4/Q4tYFnHaY0pERCRGmrOyqB93Tqu22ukzDriAA8jNPZ4TTxzN8ceP5IQTTuKEE07ixBNH079/f1566YWW51VVVVFR8SFZWdmcf/6FZGb2Z8KESWRlZTNjRgEzZ85i6NBjePLJ3/u9Rs+ePbnllttwu5s47LDDWtp79erN1Vdfy/DhhoUL72To0GH87GczmTGjgMLCm/jtb3/Dpk0bSU9P5+KLf8LBBx/cqoADmDjxAq6/vohLLplGnz59uf76Iq6/vogTTjjJ7z7uuusXXHzxTwIWcAAnn/w9rruuMOTnNXToMYwadWLAY/v27WXFipdaXW/r1i289daakNeMFxVxIiIiMVR3ybSWn5syM6mZ7T+8Gg3Tp/+MP/xhKfX19QA8//zT5OeH7lGqrKxs2Yy+rYMOOphzzjmXZcvKWtreeWcdJ544mh07vmbdurXk5Z3ZcszlcnHuuRN59tk/h3zNiRMviKj9iy8+Z/fu3Rx22OGAp1dx8uSJLF36OLfcUkRJyWIefvgBZs0qAKC+vp4FC+bx8MMP8Nvf/obLLruYhx9+oOV6Gzd+xEMPLeaaa37Kxo0fAfDii2Vs3/4VTzxRygcfvA/Aaaf9iLKyxBzqVhEnIiISQ/Vnj6cpKwuA6tlzOy3QMHToMI4/fiQvvvg8u3fvIjU1lUMO8S/QKit38sQTpSxZUsLAgQO5+OJLg17zggsm8+qry6mvr2fr1n9z5JFHkZKSwvbtX9G//wC/5/fvP4Avvvg8Ku/ns88+JTs7u+Xxtdf+D998U8XkyRezaNFizjtvEhdddEnL8ZdeeoGePXsya9aNXHnlDGpqqlsd79WrN//zPzcxdeqlvPLKcuf95TNo0GBmzCjg+ONHAJCVNZDPPvs0Ku8h2tq12K+IiIh0UHo6dZN/TEb5KuqmX9WpL/Xf//0zbrppFl9//TXTpl3J5s2f+D3HO5waiWOOGc7hhx9JefkqPvvs05aC79BDB7F79y6/5+/evYvs7Ois619f3+AXMsjM7E/fvn0BGD7c8NVX21qOffbZ5pbFjFNTUxk8+LBW53qP9et3CDU1wXdtcrlcfPvtt1F5D9GmnjgREZEYq5s6jeo77wZX5/alHH30UEaNOhGXyxWwF+5AXHBBPs8//zTV1fvIzMwEPEXc6NGnUF7+t5bnNTY2snLlCn78458EvdbTT/8p4tc99NBD2bNnT6u2UAnVo48+ms8/3wpAU1NTqwIv2LmpqfvLoo8/tgDs2bOHQw8d5PfcRKAiTkREJMbcI0b6BRwO1MaNH/Hee+/w4Yfv895777Y8fu65p2lsbOQXv7iLgoLrqKqqYuXKFezaVclrr73S6vFTT/0h4tc766zxbNmymTPOGNuq/ec/n8/mzZ/ym988yhNPlPLrXz/IT396NccfP4LGxkaee+5pvv32W5Yufbzl1zvvrAfg22/rePHFMvbt28fy5csCvu5xx32Xb76paukVe+mlF9i3b1+rey8re4avv97O6tX/YNKkC6murqa4+H6efPL39OvXj5SUFLZu/TfvvfcO//jHm1RWVrJy5Qo+/fRjNm78iAEDssjIyODhhx9g40bPDqIffriBMWPODHhP8aYlRkRERCQprF27hvXr325ZSiWUmpoavvpqG8OGHQPA5ZdfzP/7f38MmmwNZPv27Tz66EPcfvudEZ+ndeJ8qIgTERERr88/38rAgYdy0EEHhXxeVVUVd931C046aTS7d+/iuOO+y1lnjW/Xa23Z8hlHHHEkrnYMe6uI86EiTkREJLZ810rzarswrgSmIs6HijgRERFJFtqxQURERERCUhEnIiIikoRUxImIiIgkIRVxIiIiIklIRZyIiIhIElIRJyIiIpKEVMSJiIiIJCEVcSIiIiJJSEWciIiISBJSESciIiKShFTEiYiIiCQhFXEiIiIiScgV7xuQ9uk3eRIpNdW4hwzFPXQY7qOd34cOozmzf7xvT0RERGJERVySqR8/gd7z5pK+fl2r9m/Hnc2eJ5+L012JiIhIJIwxw4C7gPXAEcAua+0CY8yDQA2wDxgFFFlrt4e6loZTk0zdlKk0p6e3amt2uahesChOdyQiIiLt0B94ylr7K2ttIXCJMWY0UG2tvc1auwh4B7gt3IXUE5dkmrOyqB93Dge9+nJLW+30GbiH58TxrkRERCQS1tq32jSl4ingbm/Tti/ctVKam5ujeW9R19jobna50uJ9G4nlhRcgP9/zc//+8PHHnt9FREQk3lIifaIxJh8Y4/TIedsOAcqAKdba3aHOT/ieuKqqmnjfQuL53hkMyMoitbKSvTffSp07HXbujfddiYiIdHvZ2X0iep4xZiwwFijyaesHLAF+Gq6AgwiKOGPMIDwT8EZZa09x2p4Ahvk8bSRwkrV2izFmC7DFaf/SWjvNOWcIMA/4BBgC3GStDdtVKP7KlvfgYPelnMxfmPq7/2HWgCby8xvjfVsiIiISAWPMROBHQCEw2BjzHeBjoBiYba390hgzxVobMrEYSU/c6cAy4ASfttestX92bqQvsNRau8U5ttRaOz/AdR4D7rDWrjXGzALm4CnqpB3KylwUFPRgFP/NYM7lg40HUVAAUKtCTkREJME5IYY/A28DrwO9gEecXy7gj8YYgL1AyCIuojlxxpgxwP3W2pMDHLsB+Nhau9x5vAp4FegDvGKt/acxJh3PBL2DrbXNxpiTgMettSeFe+2dO/cm9qS9GMvL60lFhf8cwdxcN+XlGnoWERGJp+zsPhHPieuoDs2JM8akAuPxdP953er0tvUE1htjJgHVQK211luQ7QEGduS1u6tNmwKvChOsXURERLqmjv6f/7+A5T7FGdbatc7vNcC7wGlAJdDDGOOtTvsCOzr42t1STk5Tu9pFRESka+poETcdWOp9YIwZZ4w51+f4McCn1toGPOO+pzjtpwEvI+1WVFQfsL2wMHC7iIiIdE2RpFPzgMvxpCduBxZba2uNMScAm9okTHcA8505b4cBz1lr/885dg1whzHmHOAo4MZovpHuwhNeqKWkJINNm1LJyWmisLBeoQYREZFuJuEX+1WwQURERJJFLIMNmg0vIiIikoRUxImIiIgkIRVxIiIiIklIRZyIiIhIElIRJyIiIpKEVMSJiIiIJCEVcSIiIiJJSEWciIiISBJSESciIiKShFTEiYiIiCShsHuninj1mzyJlJpq3EOG4h46DPfRzu9Dh9Gc2T/etyciItKtqIiTiNWPn0DveXNJX7+uVfu3485mz5PPxemuREREuicNp0rE6qZMpTk9vVVbs8tF9YJFcbojERGR7ktFnESsOSuL+nHntGqrnT4D9/CcON2RiIhI96UiTtql7pJpLT83ZWZSM3tuHO9GRESk+1IRJ+1Sf/Z4mrKyAKiePVeBBhERkThRESftk55O3eQf05hjqJt+VbzvRkREpNtSOlXarW7qNBrGjgOXvj4iIiLxktLc3Bzvewhp5869iX2DIiIiIo7s7D4psXotDaeKiIiIJCEVcdIuZWUu8vJ6Mnhwb/LyelJWpiFVERGReND/gSViZWUuCgp6tDyuqEhzHteSn98YvxsTERHphtQTJxErLs4I2F5SErhdREREOo+KOInYpk2Bvy7B2kVERKTz6P++ErGcnKZ2tYuIiEjnUREnESsqqg/YXlgYuF1EREQ6j4o4iVh+fiOlpbXk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\n",
      "text/plain": [
       "<Figure size 720x432 with 2 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "calls.set_index('STRIKE_PRC')[['CF_CLOSE', 'IMP_VOLT']].plot(\n",
    "    secondary_y='IMP_VOLT', style=['bo', 'rv'], figsize=(10, 6));\n",
    "# plt.savefig('../../images/ch21/dx_cal_01.png');"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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dOnW7NT5881OVe6Z2CCVsZ4yV8HEB0kaKBMbJOWELbskqXgZxEnqkYkPKmcNDQlqasYybdp4amrG0tDg6iMVHj+VknqUKfFBKmVdi/muWDEq9dhiviosromT1Ktx55/L6GX3s2bZg5DY+jef2asqZRbz1WDkck2cM3GSetU0dx6bZ83uFMCB2asqbRbzVbHwEympV70lPjQdM5e2iopOY22JBBsuWpyrU5OGjcV8VSwM4iT1m9mrKmV1dT0X7bWYrwpN2d1ObWhIsGTJ1gKNdXWDL9DY2NjIjTf+KxMmTGTz5s08//xzvP/9B1BRMZrrrruSj33scCorKwH461//wle+cjozZoQej/XHPz7IH//4v0yYMJH169exatUq5s07kR133Ilrr72Shx9+iDPO+AYf+9icTs978cUXuPXWXzNhwkQA1q9fzxe+cDLbb789ALfddjN/+9szVFZO4tVXX2HKlKl85Stn8PDDD3HttVcyZcoU9t77vQC8+uor1NR8lEMOOXRQ10Wlrem4eWxz792A2asqLRbzVbEoqyBuODKOmpubOe+8M1m06AfssMOOAKxe/Rbnn38u1177U37+859x9NGfZfr09wDwxBOPU1k5ucdjPfbYcm6//VYuueQyRoxIrou89dZf88QTj3PsscdzxBFH8dxzz3YL4BobG1m4cAHXXvsTxo0bD8Bzzz3LggVncvXVP6GpaRM//emPufPO/2DEiBG0tLTwox9dBsAHPvAP/Md/3Mtee+3NMcfMBeDll19ic1qRV6knvWWvmvSgUlBb22LQpoJXVrdTlywZ3eP40qU9j/fF//7vf7PTTtM6AjiASZMmc8klP+i275133saYMWOYMmVKj8e68cZfcNRRn+4I4AA+9alaPvGJT2U8h7vuuo2DDvpgRwAHMH36nowaleCJJx6nomI0bW1t3HTTL3n77bdJJBKcffa3ejzWX/7yJE888Th77DE942tK7W27WqpCp7ZdzXOOoOLR5Wx7668Zd/mlTPzal6k8YjYTvvqlPJ6s1Jl14FQKBvWpDSEE4PPAJqAG+C6wClgI/A3YHfhmjHF9CGEksAhYD+wGXB9jfGgwr99fw5Fx9PLLLzF5cveZtfbbpwC//OW/MHHi9jz//LPstdfevR7rlVdeYtKkzsdKJBKMHz++l2ckvfHG67z73bt3G588eTKvvPIS++9/AFdd9c/88pc3cMIJN7DrrrvxhS+czD/8wz927Lts2f28/PLLrF7dyAc/+I/djiX1pKfs1aZj5jLuogu6tewy6UGFwjpwKhUDDuJCCKOAHwKfjDFuCSH8K9AC/By4IMb4cAjhDOBckkHdscDEGON5IYRJwEMhhL1jjK2Dfxt9U1W1pcfaP4PJONphhx15+ukVGfeZN+8LTJ/+Hhob32Ts2HG97jd16g6sXv1Wv89hxx134q23GruNv/XWW0ydmpwhnD59TxYu/B6tra38/ve/4/zzz+GWW+5iu+2Sa+YOPfSjHHPMXDZsWM+mTU39PgeVp9Z996OV/TqNtSc9tK+XA5MeVFgy3ZUxiFMxGczt1IOAEcAZIYQFwCeBt4FZwCOpfR4Ajkx9fSTwIECMcTXQBLx3EK/fb8ORcXTIIbN46aUXefPNVR1jL774Auee+41u+06ZMpWxY8f2eqzjjjuBe+65g/QCzDfc8FPuTftl2NWvfvVvHHXUp3nkkT+yYcP6jvHnnnuWpqYmDjzwA7z22qssXnwRAKNGjeKQQw6loqLnH2LJW7JtrFz5dK+vKWVjyy4VMuvAqVQM5nbqbsDBwOdjjP8XQvgFMBnYFGNsj0LWAjukvt4BWJf2/PRtOTEcGUfbbrstV1xxJTfd9EvGjRvH5s2bWb36Lc46awF33XU769ev5447Gjj66GN597t3y3is9tubV1/9I8aNG8+6deuorKxkzpxPsGbNGu677x7eequRG274acdzXnnlZY499nguumgx//zP1zJx4nYANDU1cfnlVzJq1CjGjRvP2rX/x5VXXsG4ceN57bVX+cpXzmC77bbnT396mGeffYb/+7//Y9265P+exsZGqqvfS1XVXgO+LipvtuxSIRuOuzJSPgy47VYI4QiSt00PTj0+DfgI8Flg2xhjWwjh/cBPY4zvDyH8HPhtjPHnqf2fAE6IMT6R6XVsuyUVJ1t2qVB1XRPXrr7eNXEavGJpu/VHYHIIYVRqXdtuwF9JzsYdBDwMfAhovxd4N3AI8PPUmrhtU/tLKkG27FKhsg6cSsWAZ+IAQgi1wEeBN4F3A2cAOwIXAM+lxs5My05dDGxMjf+kL9mppTgT9/LLL/HEE493Gtt5512ZOfN9eTojKXdGNDYyeWbolr265vcPmfwgqejlciZuUEFcLpRiECeVu4knfr5T9urGU05lw6LutRWlwRiODj1SNrkM4kzFkZRzZq9quLWve1uxYhStrSM6asFZ1FelxE+zpJzLlL1q4oOGgrXgVA7KKojzl4NUIFItu0Yvu79Tyy4w8UFDw1pwKgdltSZuTP01jF/Y/baNvxz6rv3zkt7fdbi0trYyalT3Wk4qDaOefIJRq16nefZhncZNfNBQqKkZ22MtuOrqVpYt25iHM1K5cE3cMGk6Zi5tFRWdxgbb0/Gpp/7C6ad/mdNO+yKPP/4ojz/+KKef/mWOOeYoNqf9EgK49tor+fSnD+fOO29jzZrVXHLJd/n0pw/n+uvrue66q/j2t89mzZrV3V5j48aNfO97CznyyNk89ND/dow3NNzMaad9kWeeibzzzjv87Gc/4Sc/uY7rr6/niiu+z2OPJWcyNm/ezNKlVzB79oe47babOx37q189hauvXsKiRRcyZ04NV1+9hKuvXsIll3y323msXv0WS5deQUtLz7ci/vSnh7n66iUZr9dzz/2Nr3/9NO65585u29atW9dp/LHHlnPrrb/OeDwVr9Z99+sWwMHWtl3pbNul/hqODj1SoSmrIG44fjlUV+/D/vsfwD777Mf73vd+3ve+97P//gcwadIk7rzzto791qxZw4oVf2XKlKl88pOfobJyEkcccRRTpkzl5JNP5StfOYPp09/DjTf+vNtrjB07lnPO+TatrVt417ve1TE+btx4vvzlrzJjRmDRoguZPn1PvvSlr3Dyyacyf/43+dnPfsLKlU9TUVHBscd+nm233ZbPfOaznY595JGf4vTT6zjuuHlMmDCR00+v4/TT63jf+97f7Twuvvg7HHvs56noEgi3O/DAD/C1r83PeL2mT38PM2fu3+O29es7B3EHHvgBXnzxBR55JGslGpUYEx80WLW1LdTXb6K6upVEoo3q6laL+arklFUQB7n75XDSSV/iF7+4gebm5F99t976K2prP5fxOY2NjR0N6bvaZpttOeyww7n99oaOscceW87++x/AqlVvsHz5w9TUfLRjWyKR4PDDj+Tmm/8942seeeSn+jT+8ssvsXr1at71rp2B5Kzi0UcfyQ03/JRzzqlj6dIruOqqH3LGGacC0NzczEUXLeSqq37Iz372E0444ViuuuqHHcd7+umnuPLKKzjttC/y9NNPAXDHHQ28/vprXH99PX/5y5MAfOhDH6GhwVvd5aY98QGwbZcGrLa2hWXLNvLqq+tZtmyjAZxKTtkFcbn65TB9+p7ss89+3HHHraxe/RYjR45k++27B2iNjW9y/fX1XHvtUnbYYQeOPfb4Xo/5qU8dzb333kVzczMvvvh3dt313YwYMYLXX3+NSZMmd9t/0qTJvPzyS0Pyfp5//lmmTp3a8firX/06b7+9hqOPPpbFi6/gE584is9+9riO7XfeeRtjx47ljDPO5AtfOJmNGzd02j5u3Hi+/vVvMnfu8fzmN3el3l8tO+00jZNPPpV99tkXgClTduD5558dkvegIpJKfGipCp0SH7bifMhdAAAfMElEQVQ7+ii2P3wWE047mbGXLWKbX99EYvkjjOhhGYJKX0NDgpqasUybNp6amrGWD1HZKb9PfIasuKH2//7fl/jmN8/gjTfeYN68L/Dcc3/rtk/77dS+eM97ZrDzzruybNn9PP/8sx0B34477sTq1W9123/16reYOnWHwb2JlObmzd2SDCorJzFx4kQAZswIvPbaqx3bnn/+OXbZZVcARo4cybRp7+r03PZt2223PRs39r7IOJFI8M477wzJe1Bx6altl5mrate1/2l7HTjwlqkKWwhhJ+BiYGaM8aDU2AiSXa8Adge2jzF+Mduxym4mDpK/HDZceEm3no5DbY89pjNz5v4kEokeZ+EG4lOfquXWW3/Fhg3rqaysBJJB3AEHHMSyZf/VsV9LSwv33XcPn/vc53s91q9+9W99ft0dd9yRtWvXdhrLlKG6xx578NJLLwKwZcuWTgFeb88dOXLrx/GZZyIAa9euZccdd+rzeap09JT4MBzJSSpOmerASQXuw8DtQPovwhOAt2OMV8YYzwQyZwmmlGUQ11tW3EA8/fRT/PnPj/HXvz7Jn//8eMfjW275FS0tLXznOxdz6qlfY82aNdx33z289VYjv/3tbzo9vummX/T59T72sTm88MJzHHLIrE7j3/rWd3nuuWc7slOvvvpHfPGLX2afffalpaWFW275Fe+88w433PDTjv8ee+xRAN55p4k77mhg/fr13HXX7T2+7t57v5e3317TMSt25523sX79+k7n3tDwa95443UefPABjjrqM2zYsIElSy7nxht/znbbbceIESN48cW/8+c/P8YDD/yBxsZG7rvvHp599hmefvopJk+ewujRo7nqqh/y9NMrAPjrX5/g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\n",
      "text/plain": [
       "<Figure size 720x432 with 2 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "ax = puts.set_index('STRIKE_PRC')[['CF_CLOSE', 'IMP_VOLT']].plot(\n",
    "    secondary_y='IMP_VOLT', style=['bo', 'rv'], figsize=(10, 6))\n",
    "ax.get_legend().set_bbox_to_anchor((0.25, 0.5));\n",
    "# plt.savefig('../../images/ch21/dx_cal_02.png');"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Model Calibration"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Relevant Market Data"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [],
   "source": [
    "limit = 500  "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [],
   "source": [
    "option_selection = calls[abs(calls['STRIKE_PRC'] - initial_value) < limit].copy()  "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<class 'pandas.core.frame.DataFrame'>\n",
      "Int64Index: 20 entries, 43 to 81\n",
      "Data columns (total 7 columns):\n",
      "Instrument    20 non-null object\n",
      "CF_DATE       20 non-null datetime64[ns]\n",
      "EXPIR_DATE    20 non-null datetime64[ns]\n",
      "PUTCALLIND    20 non-null object\n",
      "STRIKE_PRC    20 non-null float64\n",
      "CF_CLOSE      20 non-null float64\n",
      "IMP_VOLT      20 non-null float64\n",
      "dtypes: datetime64[ns](2), float64(3), object(2)\n",
      "memory usage: 1.2+ KB\n"
     ]
    }
   ],
   "source": [
    "option_selection.info()  "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>CF_DATE</th>\n",
       "      <th>EXPIR_DATE</th>\n",
       "      <th>PUTCALLIND</th>\n",
       "      <th>STRIKE_PRC</th>\n",
       "      <th>CF_CLOSE</th>\n",
       "      <th>IMP_VOLT</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Instrument</th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>GDAX128000G8.EX</th>\n",
       "      <td>2018-04-27</td>\n",
       "      <td>2018-07-20</td>\n",
       "      <td>CALL</td>\n",
       "      <td>12800.0</td>\n",
       "      <td>182.4</td>\n",
       "      <td>12.70</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>GDAX128500G8.EX</th>\n",
       "      <td>2018-04-27</td>\n",
       "      <td>2018-07-20</td>\n",
       "      <td>CALL</td>\n",
       "      <td>12850.0</td>\n",
       "      <td>162.0</td>\n",
       "      <td>12.52</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>GDAX129000G8.EX</th>\n",
       "      <td>2018-04-25</td>\n",
       "      <td>2018-07-20</td>\n",
       "      <td>CALL</td>\n",
       "      <td>12900.0</td>\n",
       "      <td>142.9</td>\n",
       "      <td>12.36</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>GDAX129500G8.EX</th>\n",
       "      <td>2018-04-27</td>\n",
       "      <td>2018-07-20</td>\n",
       "      <td>CALL</td>\n",
       "      <td>12950.0</td>\n",
       "      <td>125.4</td>\n",
       "      <td>12.21</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>GDAX130000G8.EX</th>\n",
       "      <td>2018-04-27</td>\n",
       "      <td>2018-07-20</td>\n",
       "      <td>CALL</td>\n",
       "      <td>13000.0</td>\n",
       "      <td>109.4</td>\n",
       "      <td>12.06</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                   CF_DATE EXPIR_DATE PUTCALLIND  STRIKE_PRC  CF_CLOSE  \\\n",
       "Instrument                                                               \n",
       "GDAX128000G8.EX 2018-04-27 2018-07-20       CALL     12800.0     182.4   \n",
       "GDAX128500G8.EX 2018-04-27 2018-07-20       CALL     12850.0     162.0   \n",
       "GDAX129000G8.EX 2018-04-25 2018-07-20       CALL     12900.0     142.9   \n",
       "GDAX129500G8.EX 2018-04-27 2018-07-20       CALL     12950.0     125.4   \n",
       "GDAX130000G8.EX 2018-04-27 2018-07-20       CALL     13000.0     109.4   \n",
       "\n",
       "                 IMP_VOLT  \n",
       "Instrument                 \n",
       "GDAX128000G8.EX     12.70  \n",
       "GDAX128500G8.EX     12.52  \n",
       "GDAX129000G8.EX     12.36  \n",
       "GDAX129500G8.EX     12.21  \n",
       "GDAX130000G8.EX     12.06  "
      ]
     },
     "execution_count": 15,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "option_selection.set_index('Instrument').tail()  "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAnQAAAFzCAYAAAC3hJTqAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDMuMC4xLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvDW2N/gAAIABJREFUeJzs3Xl8lPW5//9XyAQlbAYSlNoFEsmlqYrW2taf1kgjIoqeBqtY0ZYW2miVQ6pSjS2tUgW1oqAtNm391mMXPFYcN9x6jsX2WK0VqrY1Xqn7LiBYIAtJJvP7Y25iEiYbzGRmkvfz8chj5r7u5fMJN5lc+dyfJSsajSIiIiIimWtIqisgIiIiIntGCZ2IiIhIhlNCJyIiIpLhlNCJiIiIZDgldCIiIiIZTgmdiIiISIYLpboCABs3btPcKSIiIpIRCgpGZqW6Dp2phU5EREQkwymhExEREclwSuhEREREMpwSOhEREZEMp4ROREREJMMpoRMRERHJcEroRERERDKcEjoRERGRDKeETkREJAnC4RClpbmMHz+C0tJcwuG0mMtfBij97xIREUmwcDhERcWwtu2amuxgu4Hy8pbdvu6mTZtYteo2Ro4cRXNzM6+88jKf+tQR5OQM5eabb+T4408kLy8PgH/+8x+cd94FTJpkca/1l788wV/+8mdGjhzF9u3b2LBhA7Nnf4V9992PlStv5KmnnmT+/G9z/PHTOpz3+uuvctddv2PkyFEAbN++na9+dS777LMPAHfffScvvvgv8vLG8Pbbb5GfX8B5583nqaeeZOXKG8nPz+eggz4JwNtvv0Vp6Rc49tjjdvvfRGIGfEI3euYMsurriEwoJFJYRGRi8FpYRDRvTKqrJyIiA9Dy5UPjxlesGLrbCV1TUxOXXnohS5b8iHHj9gVg8+b3+d73LmHlyl/wq1/9kpkzv0Rh4QEAPPfcM+TljY17rb/9bR333HMXV111LVlZsVWs7rrrdzz33DOcccZZTJ8+g5dffmmXZG7Tpk0sWlTFypU/Z/jwEQC8/PJLVFVdyI9//HMaGxv4xS9+yn33/Z6srCxaWlq44YZrAfjMZz7H73//EAceeBCnnTYLgDfffIPm5ubd+vdId2a2H3AlMNndjwxiWcD84JAJwD7u/vU4554NHA5EgJfcvbqn8gZ8Qtc0bTojFlWRs35dh/iOsqlsXbU6RbUSEZGBrLY2fo+mruK98ec//4n99hvflswBjBkzlquu+tEux953390ceOBB5Ofnx73WqlW/5otfPK0tmQM49dRyGhsbu63D/fffzZFHfrYtmQMoLCwiOzvEc889wyc/eQjRaJTbb/8N06fPYJ999mHhwsviXusf//g7r7/+KieddEq3ZWawY4B7gMPaxc4GPnD32wDM7NDOJ5nZR4GLgcPdPWpmfzWzR939X90VNuD70N017CyayOkQaybE3cdem6IaiYjIQFdc3NqneG+8+eYbjB27a4vbzkesAL/5zX+xYsUy/vd/H+n2Wm+99QZjxnS8VigUYsSIEV2cEfPee+8yduyuSeLYsWN56603GDp0KDfd9DNefNE5++wvcd55c3nyyT93OHbt2kdZsWIZv/vdb7stK9O5+53Atk7h2cAYM/tPM1sCbI9z6jRgnbtHg+0ngOk9lZcVjUZ7OibpWloi0VAoO3kFfPGLcM89H27Pnw833pi88kRERGQgy+r5EDCz44Dr3P3TwXYNsMrdF5tZMXA/cJC7R9qdUwXs6+6VwfaVAO7+ve7KSotHrlu21Cft2uPHj2BGZA53E0vo3mcMk266nG03R3n77XiJsYiIyJ4Lh0OsWDGU2tohFBe3smBB0x4NiGhsbKSi4mtcd90KCgrGAbEBCj/5yQquueYGvvSlU7j22hva+tB158kn/8z999/ND394Tdtj11tv/QX77TeeE088mfXrn+YnP1nBLbf8qu2cO+74LV/4wlQuuug/d+lDt2TJFVRX/5ING97j1lt/QVXV9wFoaWnhlFNO4Pbb72L06H246qrLO/Sh27RpI5s3v09x8YG7/e+SCgUFI3f31K3AXwDcvdbMRgEfA15td8wGoP1NHAW82NOF0yKhS6bi4lbW1JzMBgoYx0Yu53K2MIaS4kjPJ4uIiOym8vKWPUrgOtt7771ZtuxGbr/9NwwfPpzm5mY2b36fiy+u4v7772H79u3ce2+YmTPP4OMf/0S31/rc5/4/AH784xsYPnwE27ZtIy8vj2nTTmLLli08/PADvP/+Jm699Rdt57z11pucccZZLF68lJ/9bCWjRo0GYonmddfdSHZ2NsOHj2Dr1n9z443LGD58BO+88zbnnTef0aP34emnn+Kll/7Fv//9b7Ztiz2J3LRpEyUln8y4hG4P/C9QCBAkc9nAu2Y2BPiou78OPAzMN7Os4LHrUcBNPV04LR65bty4LWmV2Dl0/AYqOYFHOJTniBCiunrPho6LiIjI4FRQMLLHR65mVgp8BTgRuBlYBgwFrgVeA4qA1e7+gJkdBvzK3Q8Jzj0b+DSxUa61vRnlOuATOogldQ9f8zw7Xn2PVw6ctsfN3iIiIjJ49Sah62+DIqETEREZjN588w2ee+6ZDrH99/8Ykycf1sUZ0htK6LqghE5EREQyRTomdAN+HjoRERGRgU4JnYiIiEiGG/DTloiIiPQ3rSMu/U0JnYiISIJpHfE9t7OPf/v1ZpMlEomQnZ3EFav6gQZFiIiIJFjWpk2MnWxkNTe3xaKhEFsee5LIpOLduubzz/+DlStvpKWlhXPPvQCAX/zip7zzztvcfnuYnJwP1y1fufJGHn74AebNO5djjjmWlStv5KmnnuTUU8tpamrizTdf5+KLq8jr1FpYX1/PsmVLefLJP7No0Q/bJiAOh+/k4Ycf4KKLLuHjH5/Ab397Gy0tLQwZMoQPPviAL3zheA4//Aiam5tZufJG7r33LubP/zZf/OKX2q79rW/No6TkYLZu/TePPfYop5xSDsC///0B3/3u5R3qsXnz+9x22y85//wFHb6vnZ5++imefPLPXHBBZZf/Xi+//CLLl1/HiSeezEknndJh37Zt2/jTn9a2xZ9++ilef/01Zs48vafbAGhQhIiIyKAQzc+nqeyEDrGGOXN3O5kDKCk5mMMPP4KDDz6Uww77FIcd9ikOP/wIxowZw3333d123JYtW6ip+Sf5+QWccsoXycsbw/TpM8jPL2Du3ArOO28+hYUHsGrVr3YpIzc3l+9857tEIq185CMfaYsPHz6Cb37zW0yaZCxZcgWFhUV84xvnMXduBQsWXMQvf/lzamtfICcnhzPO+DJ77713h2QO4OSTT+WCCyo588zZjBw5igsuqOSCCyo57LBP7VKPK6/8AWec8eW4yRzApz/9Gc4/f0G3/16FhQcwefLhcfdt376NBx64r8P1Xn/9Vf761ye7vWY6U0InIiKSBI1nzm5735qXR/3CqqSUM2fON/j1r2+lqakJgLvuuoPy8u5bmjZt2sTo0fvE3bfXXntzwgkncs894bbY3/62jsMPP4ING95j3bqnKC39Qtu+UCjEiSeezJ13/ne3ZZ588qm9ir/55hts3ryZj3xkfyDW2jhz5snceusv+M53KlmxYhk33XQ98+dXANDU1MTixYu46abr+eUvf87ZZ5/BTTdd33a9F154nhtvXMa5536dF154HoB77w3z7rvvcMst1fzjH38H4OijP084nLmPw5XQiYiIJEHT1Gm05ucDULewKmmDIQoLizj44EO599672Lz5fYYMGcI+++yarG3atJFbbqlm5coVjBs3jjPOOKvLa5566kweeuh+mpqaeP311/jYxz5OVlYW7777DmPGjN3l+DFjxvLmm28k5Pt55ZWXKCgoaNv+1rf+kw8+2MLMmWewdOkyTjppBl/60plt+++7725yc3OZP/9CvvrVudTX13XYP3z4CP7zPy9i1qyzePDB+4Pvr5z99hvP3LkVHHzwIQDk54/jlVdeSsj3kAoaFJFAGtUkIiJtcnJonHk6Q9c+SuOceUkt6mtf+wYXXTSf9957j9mzv8rLL7+4yzE7H7n2xgEHTGL//T/G2rWP8sorL7Ulf/vuux+bN7+/y/GbN79PQcG4PfsmAk1NzbsMUMjLG8OoUaMAmDTJeOedt9v2vfLKy3z0ox8DYMiQIYwf/5EO5+7cN3r0PtTX13dZbigUYseOHQn5HlJBLXQJ1DRtOjnr17H3Xb9j+HVXM+r8b5I3vYyR3/pGqqsmIiIp0DhrNnVXXAWh5LafTJxYyOTJhxMKheK2zu2OU08t56677qCubjt5eXlALKE74ogjWbv2f9uOa2lp4eGHH+D007/c5bXuuOO3vS533333ZevWrR1i3Y10nThxIm+88ToAra2tHZK9rs4dMuTD9Odf/3IAtm7dyr777tfreqYbJXQJ1HjaLKKdOnBGQyHqFi9NUY1ERCSVIoccusvgiN31wgvP8+yzf+Of//w7zz77TNv26tV30NLSwg9+cCUVFeezZcsWHn74Ad5/fxOPPPJgh+3bb/91r8s7/vhpvPrqyxx77JQO8csuu5yXX36Jn//8Zm65pZof//gGvv71b3LwwYfQ0tLC6tV3sGPHDm699RdtX3/723oAduxo5N57w2zfvp37778nbrkHHfRJPvhgS1tr2X333c327ds71D0c/h3vvfcuTzzxODNmfJG6ujqWL7+OVat+xejRo8nKyuL111/j2Wf/xuOP/5FNmzbx8MMP8NJL/+KFF55n7Nh8hg4dyk03Xc8L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\n",
      "text/plain": [
       "<Figure size 720x432 with 2 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "option_selection.set_index('STRIKE_PRC')[['CF_CLOSE', 'IMP_VOLT']].plot(\n",
    "    secondary_y='IMP_VOLT', style=['bo', 'rv'], figsize=(10, 6));\n",
    "# plt.savefig('../../images/ch21/dx_cal_03.png');"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Option Modeling"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {
    "uuid": "b2f6b10c-bf01-46f6-958a-e0e6266adbe8"
   },
   "outputs": [],
   "source": [
    "import dx"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {
    "uuid": "c93f5398-8620-48d1-9c6b-ae0c79653751"
   },
   "outputs": [],
   "source": [
    "pricing_date = option_selection['CF_DATE'].max()  "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {
    "uuid": "c191a3e9-286e-4c84-8044-aaf05f88377b"
   },
   "outputs": [],
   "source": [
    "me_dax = dx.market_environment('DAX30', pricing_date)  "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {},
   "outputs": [],
   "source": [
    "maturity = pd.Timestamp(calls.iloc[0]['EXPIR_DATE'])  "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {
    "uuid": "52879659-97e7-4c0f-a14f-b29bea60b3c8"
   },
   "outputs": [],
   "source": [
    "me_dax.add_constant('initial_value', initial_value)  \n",
    "me_dax.add_constant('final_date', maturity)  \n",
    "me_dax.add_constant('currency', 'EUR')  "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "metadata": {
    "uuid": "f1862ff5-ef88-4364-beba-502872ac5450"
   },
   "outputs": [],
   "source": [
    "me_dax.add_constant('frequency', 'B')  \n",
    "me_dax.add_constant('paths', 10000)  "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "metadata": {
    "uuid": "f0aedd9b-a2c9-4713-a02d-cc5a8959408e"
   },
   "outputs": [],
   "source": [
    "csr = dx.constant_short_rate('csr', 0.01)  \n",
    "me_dax.add_curve('discount_curve', csr)  "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "metadata": {
    "uuid": "11c8a827-c54c-451a-93c3-9f8db6df970c"
   },
   "outputs": [],
   "source": [
    "me_dax.add_constant('volatility', 0.2)\n",
    "me_dax.add_constant('lambda', 0.8)\n",
    "me_dax.add_constant('mu', -0.2)\n",
    "me_dax.add_constant('delta', 0.1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "metadata": {
    "uuid": "fd70a940-895e-43a4-a66c-d2c3bcc7c285"
   },
   "outputs": [],
   "source": [
    "dax_model = dx.jump_diffusion('dax_model', me_dax)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "metadata": {
    "uuid": "fe6d0c61-4907-4466-98ae-3ca782f83964"
   },
   "outputs": [],
   "source": [
    "me_dax.add_constant('strike', initial_value)  \n",
    "me_dax.add_constant('maturity', maturity)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 27,
   "metadata": {
    "uuid": "8e36b826-9439-49f2-b4fa-e35928b8df41"
   },
   "outputs": [],
   "source": [
    "payoff_func = 'np.maximum(maturity_value - strike, 0)'  "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 28,
   "metadata": {
    "uuid": "d33efcec-e027-4b1a-8fa1-c13696779de3"
   },
   "outputs": [],
   "source": [
    "dax_eur_call = dx.valuation_mcs_european('dax_eur_call',\n",
    "                        dax_model, me_dax, payoff_func)  "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 29,
   "metadata": {
    "uuid": "cedcee4e-1135-4b38-9381-d74b306de63e"
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "639.006321"
      ]
     },
     "execution_count": 29,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "dax_eur_call.present_value()  "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 30,
   "metadata": {
    "uuid": "a4a9ab6f-0810-403f-b172-d08deb80c582"
   },
   "outputs": [],
   "source": [
    "option_models = {}  \n",
    "for option in option_selection.index:\n",
    "    strike = option_selection['STRIKE_PRC'].loc[option]  \n",
    "    me_dax.add_constant('strike', strike)  \n",
    "    option_models[strike] = dx.valuation_mcs_european(\n",
    "                                'eur_call_%d' % strike,\n",
    "                                dax_model,\n",
    "                                me_dax,\n",
    "                                payoff_func)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 31,
   "metadata": {
    "uuid": "89ec1029-091b-4ab1-8d60-b7a604c02f69"
   },
   "outputs": [],
   "source": [
    "def calculate_model_values_old(p0):\n",
    "    ''' Returns all relevant option values.\n",
    "    \n",
    "    Parameters\n",
    "    ===========\n",
    "    p0: tuple/list\n",
    "        tuple of kappa, theta, volatility\n",
    "    \n",
    "    Returns\n",
    "    =======\n",
    "    model_values: dict\n",
    "        dictionary with model values\n",
    "    '''\n",
    "    volatility, lamb, mu, delta = p0\n",
    "    dax_model.update(volatility=volatility, lamb=lamb, mu=mu, delta=delta)\n",
    "    model_values = {}\n",
    "    for strike in option_models:\n",
    "        model_values[strike] = option_models[strike].present_value(fixed_seed=True)\n",
    "    return model_values"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 32,
   "metadata": {
    "uuid": "89ec1029-091b-4ab1-8d60-b7a604c02f69"
   },
   "outputs": [],
   "source": [
    "def calculate_model_values(p0):\n",
    "    ''' Returns all relevant option values.\n",
    "    \n",
    "    Parameters\n",
    "    ===========\n",
    "    p0: tuple/list\n",
    "        tuple of kappa, theta, volatility\n",
    "    \n",
    "    Returns\n",
    "    =======\n",
    "    model_values: dict\n",
    "        dictionary with model values\n",
    "    '''\n",
    "    volatility, lamb, mu, delta = p0\n",
    "    dax_model.update(volatility=volatility, lamb=lamb,\n",
    "                     mu=mu, delta=delta)\n",
    "    return {\n",
    "            strike: model.present_value(fixed_seed=True)\n",
    "            for strike, model in option_models.items()\n",
    "        }"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 33,
   "metadata": {
    "uuid": "d16e0a95-8543-4b08-b056-3d4f83d05e51"
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "{12050.0: 611.222524,\n",
       " 12100.0: 571.83659,\n",
       " 12150.0: 533.595853,\n",
       " 12200.0: 496.607225,\n",
       " 12250.0: 460.863233,\n",
       " 12300.0: 426.543355,\n",
       " 12350.0: 393.626483,\n",
       " 12400.0: 362.066869,\n",
       " 12450.0: 331.877733,\n",
       " 12500.0: 303.133596,\n",
       " 12550.0: 275.987049,\n",
       " 12600.0: 250.504646,\n",
       " 12650.0: 226.687523,\n",
       " 12700.0: 204.550609,\n",
       " 12750.0: 184.020514,\n",
       " 12800.0: 164.945082,\n",
       " 12850.0: 147.249829,\n",
       " 12900.0: 130.831722,\n",
       " 12950.0: 115.681449,\n",
       " 13000.0: 101.917351}"
      ]
     },
     "execution_count": 33,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "calculate_model_values((0.1, 0.1, -0.4, 0.0))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Calibration Procedure"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 34,
   "metadata": {
    "uuid": "6d94c077-ebf9-46e3-8185-d4c80d12116d"
   },
   "outputs": [],
   "source": [
    "i = 0\n",
    "def mean_squared_error(p0):\n",
    "    ''' Returns the mean-squared error given\n",
    "    the model and market values.\n",
    "    \n",
    "    Parameters\n",
    "    ===========\n",
    "    p0: tuple/list\n",
    "        tuple of kappa, theta, volatility\n",
    "    \n",
    "    Returns\n",
    "    =======\n",
    "    MSE: float\n",
    "        mean-squared error\n",
    "    '''\n",
    "    global i\n",
    "    model_values = np.array(list(calculate_model_values(p0).values()))  \n",
    "    market_values = option_selection['CF_CLOSE'].values  \n",
    "    option_diffs = model_values - market_values  \n",
    "    MSE = np.sum(option_diffs ** 2) / len(option_diffs)  \n",
    "    if i % 75 == 0:\n",
    "        if i == 0:\n",
    "            print('%4s  %6s  %6s  %6s  %6s --> %6s' % \n",
    "                 ('i', 'vola', 'lambda', 'mu', 'delta', 'MSE'))\n",
    "        print('%4d  %6.3f  %6.3f  %6.3f  %6.3f --> %6.3f' % \n",
    "                (i, p0[0], p0[1], p0[2], p0[3], MSE))\n",
    "    i += 1\n",
    "    return MSE        "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 35,
   "metadata": {
    "uuid": "489f4f60-5237-4eff-be12-19abc6583ecb"
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "   i    vola  lambda      mu   delta -->    MSE\n",
      "   0   0.100   0.100  -0.400   0.000 --> 728.375\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "728.3752973715275"
      ]
     },
     "execution_count": 35,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "mean_squared_error((0.1, 0.1, -0.4, 0.0))  "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 36,
   "metadata": {
    "uuid": "d4d06a9e-929b-4a02-95c1-433529015988"
   },
   "outputs": [],
   "source": [
    "import scipy.optimize as spo"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 37,
   "metadata": {
    "uuid": "15b93990-3228-4330-b5df-10915827ebcc"
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "   i    vola  lambda      mu   delta -->    MSE\n",
      "   0   0.100   0.100  -0.400   0.000 --> 728.375\n",
      "  75   0.100   0.300  -0.400   0.080 --> 5157.513\n",
      " 150   0.100   0.500  -0.300   0.040 --> 12199.386\n",
      " 225   0.100   0.700  -0.200   0.000 --> 6904.932\n",
      " 300   0.125   0.200  -0.200   0.100 --> 855.412\n",
      " 375   0.125   0.400  -0.100   0.060 --> 621.800\n",
      " 450   0.125   0.600   0.000   0.020 --> 544.137\n",
      " 525   0.150   0.100   0.000   0.120 --> 3410.776\n",
      " 600   0.150   0.400  -0.400   0.080 --> 46775.769\n",
      " 675   0.150   0.600  -0.300   0.040 --> 56331.321\n",
      " 750   0.175   0.100  -0.200   0.000 --> 14562.213\n",
      " 825   0.175   0.300  -0.200   0.100 --> 24599.738\n",
      " 900   0.175   0.500  -0.100   0.060 --> 19183.167\n",
      " 975   0.175   0.700   0.000   0.020 --> 11871.683\n",
      "1050   0.200   0.200   0.000   0.120 --> 31736.403\n",
      "1125   0.200   0.500  -0.400   0.080 --> 130372.718\n",
      "1200   0.200   0.700  -0.300   0.040 --> 126365.140\n",
      "CPU times: user 1min 20s, sys: 1.84 s, total: 1min 21s\n",
      "Wall time: 1min 22s\n"
     ]
    }
   ],
   "source": [
    "%%time\n",
    "i = 0\n",
    "opt_global = spo.brute(mean_squared_error,\n",
    "                  ((0.10, 0.201, 0.025),  # range for volatility\n",
    "                   (0.10, 0.80, 0.10),  # range for jump intensity\n",
    "                   (-0.40, 0.01, 0.10),  # range for average jump size\n",
    "                   (0.00, 0.121, 0.02)),  # range for jump variability\n",
    "                 finish=None)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 38,
   "metadata": {
    "uuid": "359c3f5f-4f47-4e53-a916-85d3c745ed1b"
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "17.946670038040985"
      ]
     },
     "execution_count": 38,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "mean_squared_error(opt_global)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 39,
   "metadata": {
    "uuid": "9fd46baf-28af-4276-a1c1-b3e521550cdd"
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "   i    vola  lambda      mu   delta -->    MSE\n",
      "   0   0.100   0.200  -0.300   0.000 --> 17.947\n",
      "  75   0.098   0.216  -0.302  -0.001 -->  7.885\n",
      " 150   0.098   0.216  -0.300  -0.001 -->  7.371\n",
      "Optimization terminated successfully.\n",
      "         Current function value: 7.371163\n",
      "         Iterations: 100\n",
      "         Function evaluations: 188\n",
      "CPU times: user 12.2 s, sys: 288 ms, total: 12.5 s\n",
      "Wall time: 12.5 s\n"
     ]
    }
   ],
   "source": [
    "%%time\n",
    "i = 0\n",
    "opt_local = spo.fmin(mean_squared_error, opt_global,\n",
    "                     xtol=0.00001, ftol=0.00001,\n",
    "                     maxiter=200, maxfun=550)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 40,
   "metadata": {
    "uuid": "d7c22ea7-b3dd-4408-9ef2-3a986354ba26"
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "   i    vola  lambda      mu   delta -->    MSE\n",
      "   0   0.098   0.216  -0.300  -0.001 -->  7.371\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "7.371162645265256"
      ]
     },
     "execution_count": 40,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "i = 0\n",
    "mean_squared_error(opt_local)  "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 41,
   "metadata": {
    "uuid": "70b888ee-8d31-46b2-86be-ad95dedd347a"
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "{12050.0: 647.428189,\n",
       " 12100.0: 607.402796,\n",
       " 12150.0: 568.46137,\n",
       " 12200.0: 530.703659,\n",
       " 12250.0: 494.093839,\n",
       " 12300.0: 458.718401,\n",
       " 12350.0: 424.650128,\n",
       " 12400.0: 392.023241,\n",
       " 12450.0: 360.728543,\n",
       " 12500.0: 330.727256,\n",
       " 12550.0: 302.117223,\n",
       " 12600.0: 274.98474,\n",
       " 12650.0: 249.501807,\n",
       " 12700.0: 225.678695,\n",
       " 12750.0: 203.490065,\n",
       " 12800.0: 182.947468,\n",
       " 12850.0: 163.907583,\n",
       " 12900.0: 146.259349,\n",
       " 12950.0: 129.909743,\n",
       " 13000.0: 114.852425}"
      ]
     },
     "execution_count": 41,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "calculate_model_values(opt_local)  "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 42,
   "metadata": {
    "uuid": "d6cf96da-5139-435e-8ed9-6be593fa7a15"
   },
   "outputs": [],
   "source": [
    "option_selection['MODEL'] = np.array(list(calculate_model_values(opt_local).values()))\n",
    "option_selection['ERRORS_EUR'] = (option_selection['MODEL'] -\n",
    "                                  option_selection['CF_CLOSE'])\n",
    "option_selection['ERRORS_%'] = (option_selection['ERRORS_EUR'] /\n",
    "                                option_selection['CF_CLOSE']) * 100"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 43,
   "metadata": {
    "uuid": "716cd81a-0e06-405c-ade7-7fa407ce19cb"
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>MODEL</th>\n",
       "      <th>CF_CLOSE</th>\n",
       "      <th>ERRORS_EUR</th>\n",
       "      <th>ERRORS_%</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>43</th>\n",
       "      <td>647.428189</td>\n",
       "      <td>642.6</td>\n",
       "      <td>4.828189</td>\n",
       "      <td>0.751352</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>45</th>\n",
       "      <td>607.402796</td>\n",
       "      <td>604.4</td>\n",
       "      <td>3.002796</td>\n",
       "      <td>0.496823</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>47</th>\n",
       "      <td>568.461370</td>\n",
       "      <td>567.1</td>\n",
       "      <td>1.361370</td>\n",
       "      <td>0.240058</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>49</th>\n",
       "      <td>530.703659</td>\n",
       "      <td>530.4</td>\n",
       "      <td>0.303659</td>\n",
       "      <td>0.057251</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>51</th>\n",
       "      <td>494.093839</td>\n",
       "      <td>494.8</td>\n",
       "      <td>-0.706161</td>\n",
       "      <td>-0.142716</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>53</th>\n",
       "      <td>458.718401</td>\n",
       "      <td>460.3</td>\n",
       "      <td>-1.581599</td>\n",
       "      <td>-0.343602</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>55</th>\n",
       "      <td>424.650128</td>\n",
       "      <td>426.8</td>\n",
       "      <td>-2.149872</td>\n",
       "      <td>-0.503719</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>57</th>\n",
       "      <td>392.023241</td>\n",
       "      <td>394.4</td>\n",
       "      <td>-2.376759</td>\n",
       "      <td>-0.602627</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>59</th>\n",
       "      <td>360.728543</td>\n",
       "      <td>363.3</td>\n",
       "      <td>-2.571457</td>\n",
       "      <td>-0.707805</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>61</th>\n",
       "      <td>330.727256</td>\n",
       "      <td>333.3</td>\n",
       "      <td>-2.572744</td>\n",
       "      <td>-0.771900</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>63</th>\n",
       "      <td>302.117223</td>\n",
       "      <td>304.8</td>\n",
       "      <td>-2.682777</td>\n",
       "      <td>-0.880176</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>65</th>\n",
       "      <td>274.984740</td>\n",
       "      <td>277.5</td>\n",
       "      <td>-2.515260</td>\n",
       "      <td>-0.906400</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>67</th>\n",
       "      <td>249.501807</td>\n",
       "      <td>251.7</td>\n",
       "      <td>-2.198193</td>\n",
       "      <td>-0.873338</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>69</th>\n",
       "      <td>225.678695</td>\n",
       "      <td>227.3</td>\n",
       "      <td>-1.621305</td>\n",
       "      <td>-0.713289</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>71</th>\n",
       "      <td>203.490065</td>\n",
       "      <td>204.1</td>\n",
       "      <td>-0.609935</td>\n",
       "      <td>-0.298841</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>73</th>\n",
       "      <td>182.947468</td>\n",
       "      <td>182.4</td>\n",
       "      <td>0.547468</td>\n",
       "      <td>0.300147</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>75</th>\n",
       "      <td>163.907583</td>\n",
       "      <td>162.0</td>\n",
       "      <td>1.907583</td>\n",
       "      <td>1.177520</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>77</th>\n",
       "      <td>146.259349</td>\n",
       "      <td>142.9</td>\n",
       "      <td>3.359349</td>\n",
       "      <td>2.350839</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>79</th>\n",
       "      <td>129.909743</td>\n",
       "      <td>125.4</td>\n",
       "      <td>4.509743</td>\n",
       "      <td>3.596286</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>81</th>\n",
       "      <td>114.852425</td>\n",
       "      <td>109.4</td>\n",
       "      <td>5.452425</td>\n",
       "      <td>4.983935</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "         MODEL  CF_CLOSE  ERRORS_EUR  ERRORS_%\n",
       "43  647.428189     642.6    4.828189  0.751352\n",
       "45  607.402796     604.4    3.002796  0.496823\n",
       "47  568.461370     567.1    1.361370  0.240058\n",
       "49  530.703659     530.4    0.303659  0.057251\n",
       "51  494.093839     494.8   -0.706161 -0.142716\n",
       "53  458.718401     460.3   -1.581599 -0.343602\n",
       "55  424.650128     426.8   -2.149872 -0.503719\n",
       "57  392.023241     394.4   -2.376759 -0.602627\n",
       "59  360.728543     363.3   -2.571457 -0.707805\n",
       "61  330.727256     333.3   -2.572744 -0.771900\n",
       "63  302.117223     304.8   -2.682777 -0.880176\n",
       "65  274.984740     277.5   -2.515260 -0.906400\n",
       "67  249.501807     251.7   -2.198193 -0.873338\n",
       "69  225.678695     227.3   -1.621305 -0.713289\n",
       "71  203.490065     204.1   -0.609935 -0.298841\n",
       "73  182.947468     182.4    0.547468  0.300147\n",
       "75  163.907583     162.0    1.907583  1.177520\n",
       "77  146.259349     142.9    3.359349  2.350839\n",
       "79  129.909743     125.4    4.509743  3.596286\n",
       "81  114.852425     109.4    5.452425  4.983935"
      ]
     },
     "execution_count": 43,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "option_selection[['MODEL', 'CF_CLOSE', 'ERRORS_EUR', 'ERRORS_%']]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 44,
   "metadata": {
    "uuid": "91c24e54-e18a-4cfe-88b2-82ef82947b9c"
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.184"
      ]
     },
     "execution_count": 44,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "round(option_selection['ERRORS_EUR'].mean(), 3)  "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 45,
   "metadata": {
    "uuid": "91c24e54-e18a-4cfe-88b2-82ef82947b9c"
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.36"
      ]
     },
     "execution_count": 45,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "round(option_selection['ERRORS_%'].mean(), 3)  "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 46,
   "metadata": {
    "uuid": "9d2912c2-9ab3-4423-95d5-984df6f9f31e"
   },
   "outputs": [
    {
     "data": {
      "image/png": "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HFwwZCrwSi/HJiIiIhIRYSvIjDFnA1cAOcaYnxhjEoAHgQJjzE+AG4BvAlhrK/HPvvytMeY+4M8a0C8iIiIDRdgeWVpr3wbe7uTQ94Kc/xTwVLjiEREREXEql8/nO/5ZIiIiIhI2vT2GTERERESOoIJMREREJMJUkImIiIhEmAoyERERkQhTQSYiIiISYSrIRERERCJMBZmIiIhIhKkgExEREYkwFWQiIiIiEaaCTERERCTCVJCJiIiIRJgKMhEREZEIU0EmIiIiEmEqyEREREQiTAWZiIiISISpIBMRERGJMBVkIiIiIhGmgkxEREQkwlSQiYiIiESYCjIRERGRCFNBJiIiIhJhKshEREREIkwFmYiIiEiEqSATERERiTAVZCIiIiIRpoJMREREJMJUkImIiIhEmAoyERERkQhTQSYiIiISYSrIRERERCJMBZmIiIhIhMVEOoATUVvb5At2zONJpL6+uTfDkW5QnpxPOXI+5cj5lCPn640ceb0prmDH+m0PWUxMdKRDkBAoT86nHDmfcuR8ypHzRTpH/bYgExEREekrVJCJiIiIRJgKMhEREZEIU0EmIiIiEmEqyEREREQirE8veyEiIiISiqvueeOYx1+876JeiqRz6iETERERiTAVZCIiIiIRpoJMREREJMJUkImIiIhEmAoyERERkQhTQSYiIiISYSrIRERERCJMBZmIiIhIhKkgExEREYkwFWQiIiIiEaatk0JwvO0WHrt5Ri9FIiIiIv2ReshEREREIkwFmYiIiEiEqSATERERiTAVZCIiIiIRpoJMREREJMI0y1JEREQiRisZ+KmHTERERCTCVJCJiIiIRJgKMhEREZEIU0EmIiIiEmEqyEREREQizHGzLI0xCcBi4DVr7Y2RjkdEREQk3JzYQ3YXsCLSQYiIiIj0FkcVZMaYK4D3gPJIxyIiIiLSWxzzyNIYMwYYba291RgzIZTPeDyJxMREBz3u9ab0VHjH1Fv36a/083M+5cj5lCPnU466pzd/bpHMkWMKMmAm8LEx5mZgGhBnjJltrX0g2Afq65uDXszrTaG2tqnno+xEb92nP+rNPEn3KEfOpxw5n3LUfb35cwv3vY5V8DmmILPW/uLga2PMICD5WMWYiIiISH/hqDFkAMaYLwDTgSnGmMsiHY+IiIhIuDmmh+wga+2zwLORjkNERESktziu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\n",
      "text/plain": [
       "<Figure size 720x720 with 3 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "fix, (ax1, ax2, ax3) = plt.subplots(3, sharex=True, figsize=(10, 10))\n",
    "strikes = option_selection['STRIKE_PRC'].values\n",
    "ax1.plot(strikes, option_selection['CF_CLOSE'], label='market quotes')\n",
    "ax1.plot(strikes, option_selection['MODEL'], 'ro', label='model values')\n",
    "ax1.set_ylabel('option values')\n",
    "ax1.legend(loc=0)\n",
    "wi = 15\n",
    "ax2.bar(strikes - wi / 2., option_selection['ERRORS_EUR'], width=wi)\n",
    "ax2.set_ylabel('errors [EUR]')\n",
    "ax3.bar(strikes - wi / 2., option_selection['ERRORS_%'], width=wi)\n",
    "ax3.set_ylabel('errors [%]')\n",
    "ax3.set_xlabel('strikes');\n",
    "# plt.savefig('../../images/ch21/dx_cal_04.png');"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Market-Based Valuation"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Modeling Option Positions"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 47,
   "metadata": {
    "uuid": "40decf0f-1908-48e8-b5c3-0fa5b667575c"
   },
   "outputs": [],
   "source": [
    "me_dax = dx.market_environment('me_dax', pricing_date)\n",
    "me_dax.add_constant('initial_value', initial_value)\n",
    "me_dax.add_constant('final_date', pricing_date)\n",
    "me_dax.add_constant('currency', 'EUR')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 48,
   "metadata": {
    "uuid": "88c93f7b-7944-4724-8b7d-a8f9d231d926"
   },
   "outputs": [],
   "source": [
    "me_dax.add_constant('volatility', opt_local[0])  \n",
    "me_dax.add_constant('lambda', opt_local[1])  \n",
    "me_dax.add_constant('mu', opt_local[2])  \n",
    "me_dax.add_constant('delta', opt_local[3])  "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 49,
   "metadata": {
    "uuid": "8d92c037-79db-4663-9ad4-863dc720d160"
   },
   "outputs": [],
   "source": [
    "me_dax.add_constant('model', 'jd')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 50,
   "metadata": {
    "uuid": "ee26163e-cfc2-4bd4-99ef-d9d877dc9592"
   },
   "outputs": [],
   "source": [
    "payoff_func = 'np.maximum(strike - instrument_values, 0)'"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 51,
   "metadata": {
    "uuid": "f4882acb-2157-4073-b2e7-b9c79a428a2c"
   },
   "outputs": [],
   "source": [
    "shared = dx.market_environment('share', pricing_date)  \n",
    "shared.add_constant('maturity', maturity)  \n",
    "shared.add_constant('currency', 'EUR')  "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 52,
   "metadata": {
    "uuid": "e48619d3-c12d-4387-bc0d-51dccd00d19e"
   },
   "outputs": [],
   "source": [
    "option_positions = {}\n",
    "option_environments = {}\n",
    "for option in option_selection.index:\n",
    "    option_environments[option] = dx.market_environment(\n",
    "        'am_put_%d' % option, pricing_date)  \n",
    "    strike = option_selection['STRIKE_PRC'].loc[option]  \n",
    "    option_environments[option].add_constant('strike', strike)  \n",
    "    option_environments[option].add_environment(shared)  \n",
    "    option_positions['am_put_%d' % strike] = \\\n",
    "                    dx.derivatives_position(\n",
    "                        'am_put_%d' % strike,\n",
    "                        quantity=np.random.randint(10, 50),\n",
    "                        underlying='dax_model',\n",
    "                        mar_env=option_environments[option],\n",
    "                        otype='American',\n",
    "                        payoff_func=payoff_func)  "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### The Options Portfolio"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 53,
   "metadata": {
    "uuid": "f885f822-7d78-4841-99c5-f30f1bf23ebb"
   },
   "outputs": [],
   "source": [
    "val_env = dx.market_environment('val_env', pricing_date)\n",
    "val_env.add_constant('starting_date', pricing_date)\n",
    "val_env.add_constant('final_date', pricing_date)  \n",
    "val_env.add_curve('discount_curve', csr)\n",
    "val_env.add_constant('frequency', 'B')\n",
    "val_env.add_constant('paths', 25000)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 54,
   "metadata": {
    "uuid": "d9a3a473-3cfb-49ab-be94-848349683a9a"
   },
   "outputs": [],
   "source": [
    "underlyings = {'dax_model' : me_dax}  "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 55,
   "metadata": {
    "uuid": "590ae8ed-39b9-42a3-84f2-35b2b400d8b8"
   },
   "outputs": [],
   "source": [
    "portfolio = dx.derivatives_portfolio('portfolio', option_positions,\n",
    "                                  val_env, underlyings)  "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 56,
   "metadata": {
    "uuid": "11539da8-35b0-4daf-94ee-52aae7d9fca8"
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "CPU times: user 2min 6s, sys: 981 ms, total: 2min 7s\n",
      "Wall time: 32 s\n"
     ]
    }
   ],
   "source": [
    "%time results = portfolio.get_statistics(fixed_seed=True)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 57,
   "metadata": {
    "uuid": "883fa311-3410-4572-a8d1-a526e2914f69"
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>name</th>\n",
       "      <th>quant.</th>\n",
       "      <th>value</th>\n",
       "      <th>curr.</th>\n",
       "      <th>pos_value</th>\n",
       "      <th>pos_delta</th>\n",
       "      <th>pos_vega</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>am_put_12050</td>\n",
       "      <td>33</td>\n",
       "      <td>151.6</td>\n",
       "      <td>EUR</td>\n",
       "      <td>5002.8</td>\n",
       "      <td>-4.7</td>\n",
       "      <td>38206.9</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>am_put_12100</td>\n",
       "      <td>38</td>\n",
       "      <td>161.5</td>\n",
       "      <td>EUR</td>\n",
       "      <td>6138.4</td>\n",
       "      <td>-5.7</td>\n",
       "      <td>51365.2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>am_put_12150</td>\n",
       "      <td>20</td>\n",
       "      <td>171.3</td>\n",
       "      <td>EUR</td>\n",
       "      <td>3426.8</td>\n",
       "      <td>-3.3</td>\n",
       "      <td>27894.5</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>am_put_12200</td>\n",
       "      <td>12</td>\n",
       "      <td>183.9</td>\n",
       "      <td>EUR</td>\n",
       "      <td>2206.6</td>\n",
       "      <td>-2.2</td>\n",
       "      <td>18479.7</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>am_put_12250</td>\n",
       "      <td>37</td>\n",
       "      <td>197.4</td>\n",
       "      <td>EUR</td>\n",
       "      <td>7302.8</td>\n",
       "      <td>-7.3</td>\n",
       "      <td>59423.5</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>am_put_12300</td>\n",
       "      <td>37</td>\n",
       "      <td>212.3</td>\n",
       "      <td>EUR</td>\n",
       "      <td>7853.9</td>\n",
       "      <td>-8.2</td>\n",
       "      <td>65911.9</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>am_put_12350</td>\n",
       "      <td>36</td>\n",
       "      <td>228.4</td>\n",
       "      <td>EUR</td>\n",
       "      <td>8224.1</td>\n",
       "      <td>-9.0</td>\n",
       "      <td>70969.4</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>am_put_12400</td>\n",
       "      <td>16</td>\n",
       "      <td>244.3</td>\n",
       "      <td>EUR</td>\n",
       "      <td>3908.4</td>\n",
       "      <td>-4.3</td>\n",
       "      <td>32871.4</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8</th>\n",
       "      <td>am_put_12450</td>\n",
       "      <td>17</td>\n",
       "      <td>262.7</td>\n",
       "      <td>EUR</td>\n",
       "      <td>4465.6</td>\n",
       "      <td>-5.1</td>\n",
       "      <td>37451.2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>9</th>\n",
       "      <td>am_put_12500</td>\n",
       "      <td>16</td>\n",
       "      <td>283.4</td>\n",
       "      <td>EUR</td>\n",
       "      <td>4534.8</td>\n",
       "      <td>-5.2</td>\n",
       "      <td>36158.2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>10</th>\n",
       "      <td>am_put_12550</td>\n",
       "      <td>38</td>\n",
       "      <td>305.3</td>\n",
       "      <td>EUR</td>\n",
       "      <td>11602.3</td>\n",
       "      <td>-13.3</td>\n",
       "      <td>86869.9</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>11</th>\n",
       "      <td>am_put_12600</td>\n",
       "      <td>10</td>\n",
       "      <td>330.4</td>\n",
       "      <td>EUR</td>\n",
       "      <td>3303.9</td>\n",
       "      <td>-3.9</td>\n",
       "      <td>22144.5</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>12</th>\n",
       "      <td>am_put_12650</td>\n",
       "      <td>38</td>\n",
       "      <td>355.5</td>\n",
       "      <td>EUR</td>\n",
       "      <td>13508.3</td>\n",
       "      <td>-16.0</td>\n",
       "      <td>89124.8</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>13</th>\n",
       "      <td>am_put_12700</td>\n",
       "      <td>40</td>\n",
       "      <td>384.2</td>\n",
       "      <td>EUR</td>\n",
       "      <td>15367.5</td>\n",
       "      <td>-18.6</td>\n",
       "      <td>90871.2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>14</th>\n",
       "      <td>am_put_12750</td>\n",
       "      <td>13</td>\n",
       "      <td>413.5</td>\n",
       "      <td>EUR</td>\n",
       "      <td>5375.7</td>\n",
       "      <td>-6.5</td>\n",
       "      <td>28626.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>15</th>\n",
       "      <td>am_put_12800</td>\n",
       "      <td>49</td>\n",
       "      <td>445.0</td>\n",
       "      <td>EUR</td>\n",
       "      <td>21806.6</td>\n",
       "      <td>-26.3</td>\n",
       "      <td>105287.3</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>16</th>\n",
       "      <td>am_put_12850</td>\n",
       "      <td>30</td>\n",
       "      <td>477.4</td>\n",
       "      <td>EUR</td>\n",
       "      <td>14321.8</td>\n",
       "      <td>-17.0</td>\n",
       "      <td>60757.2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>17</th>\n",
       "      <td>am_put_12900</td>\n",
       "      <td>33</td>\n",
       "      <td>510.3</td>\n",
       "      <td>EUR</td>\n",
       "      <td>16840.1</td>\n",
       "      <td>-19.7</td>\n",
       "      <td>69163.6</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>18</th>\n",
       "      <td>am_put_12950</td>\n",
       "      <td>40</td>\n",
       "      <td>544.4</td>\n",
       "      <td>EUR</td>\n",
       "      <td>21777.0</td>\n",
       "      <td>-24.9</td>\n",
       "      <td>80472.3</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>19</th>\n",
       "      <td>am_put_13000</td>\n",
       "      <td>35</td>\n",
       "      <td>582.3</td>\n",
       "      <td>EUR</td>\n",
       "      <td>20378.9</td>\n",
       "      <td>-22.9</td>\n",
       "      <td>66522.6</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "            name  quant.  value curr.  pos_value  pos_delta  pos_vega\n",
       "0   am_put_12050      33  151.6   EUR     5002.8       -4.7   38206.9\n",
       "1   am_put_12100      38  161.5   EUR     6138.4       -5.7   51365.2\n",
       "2   am_put_12150      20  171.3   EUR     3426.8       -3.3   27894.5\n",
       "3   am_put_12200      12  183.9   EUR     2206.6       -2.2   18479.7\n",
       "4   am_put_12250      37  197.4   EUR     7302.8       -7.3   59423.5\n",
       "5   am_put_12300      37  212.3   EUR     7853.9       -8.2   65911.9\n",
       "6   am_put_12350      36  228.4   EUR     8224.1       -9.0   70969.4\n",
       "7   am_put_12400      16  244.3   EUR     3908.4       -4.3   32871.4\n",
       "8   am_put_12450      17  262.7   EUR     4465.6       -5.1   37451.2\n",
       "9   am_put_12500      16  283.4   EUR     4534.8       -5.2   36158.2\n",
       "10  am_put_12550      38  305.3   EUR    11602.3      -13.3   86869.9\n",
       "11  am_put_12600      10  330.4   EUR     3303.9       -3.9   22144.5\n",
       "12  am_put_12650      38  355.5   EUR    13508.3      -16.0   89124.8\n",
       "13  am_put_12700      40  384.2   EUR    15367.5      -18.6   90871.2\n",
       "14  am_put_12750      13  413.5   EUR     5375.7       -6.5   28626.0\n",
       "15  am_put_12800      49  445.0   EUR    21806.6      -26.3  105287.3\n",
       "16  am_put_12850      30  477.4   EUR    14321.8      -17.0   60757.2\n",
       "17  am_put_12900      33  510.3   EUR    16840.1      -19.7   69163.6\n",
       "18  am_put_12950      40  544.4   EUR    21777.0      -24.9   80472.3\n",
       "19  am_put_13000      35  582.3   EUR    20378.9      -22.9   66522.6"
      ]
     },
     "execution_count": 57,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "results.round(1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 58,
   "metadata": {
    "uuid": "8ceae186-64e2-405d-8563-b6349c0f13b2"
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "pos_value     197346.2\n",
       "pos_delta       -224.0\n",
       "pos_vega     1138571.1\n",
       "dtype: float64"
      ]
     },
     "execution_count": 58,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "results[['pos_value','pos_delta','pos_vega']].sum().round(1)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<img src=\"http://hilpisch.com/tpq_logo.png\" alt=\"The Python Quants\" width=\"35%\" align=\"right\" border=\"0\"><br>\n",
    "\n",
    "<a href=\"http://tpq.io\" target=\"_blank\">http://tpq.io</a> | <a href=\"http://twitter.com/dyjh\" target=\"_blank\">@dyjh</a> | <a href=\"mailto:training@tpq.io\">training@tpq.io</a>"
   ]
  }
 ],
 "metadata": {
  "anaconda-cloud": {},
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.7"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 1
}
